#define IA64_LOG_COUNT(it) ia64_state_log[it].isl_count
#ifdef XEN
-struct list_head sal_queue[IA64_MAX_LOG_TYPES];
-sal_log_record_header_t *sal_record = NULL;
+struct list_head *sal_queue, sal_log_queues[IA64_MAX_LOG_TYPES];
+sal_log_record_header_t *sal_record;
DEFINE_SPINLOCK(sal_queue_lock);
#endif
}
}
#ifdef XEN
- else {
+ else if (sal_queue) {
int i;
for (i = 0; i < IA64_MAX_LOG_TYPES; i++)
ia64_log_queue(i, 0);
ia64_log_init(SAL_INFO_TYPE_CPE);
#ifdef XEN
- INIT_LIST_HEAD(&sal_queue[SAL_INFO_TYPE_MCA]);
- INIT_LIST_HEAD(&sal_queue[SAL_INFO_TYPE_INIT]);
- INIT_LIST_HEAD(&sal_queue[SAL_INFO_TYPE_CMC]);
- INIT_LIST_HEAD(&sal_queue[SAL_INFO_TYPE_CPE]);
+ INIT_LIST_HEAD(&sal_log_queues[SAL_INFO_TYPE_MCA]);
+ INIT_LIST_HEAD(&sal_log_queues[SAL_INFO_TYPE_INIT]);
+ INIT_LIST_HEAD(&sal_log_queues[SAL_INFO_TYPE_CMC]);
+ INIT_LIST_HEAD(&sal_log_queues[SAL_INFO_TYPE_CPE]);
+
+ /* NULL sal_queue used elsewhere to determine MCA init state */
+ sal_queue = sal_log_queues;
open_softirq(CMC_DISABLE_SOFTIRQ,
(softirq_handler)ia64_mca_cmc_vector_disable);
struct smp_call_args_t arg;
spin_lock_irqsave(&sal_queue_lock, flags);
- if (list_empty(&sal_queue[in1])) {
+ if (!sal_queue || list_empty(&sal_queue[in1])) {
sal_log_record_header_t header;
XEN_GUEST_HANDLE(void) handle =
*(XEN_GUEST_HANDLE(void)*)&in3;